#install.packages("readxl")
#install.packages("imager")
#devtools::install_bitbucket("graumannlabtools/multipanelfigure")

# install.packages("BiocManager")
# BiocManager::install("EBImage")

#install.packages('readbitmap')
library(ggplot2)
package 㤼㸱ggplot2㤼㸲 was built under R version 4.0.4
library(dplyr)
package 㤼㸱dplyr㤼㸲 was built under R version 4.0.3
Attaching package: 㤼㸱dplyr㤼㸲

The following objects are masked from 㤼㸱package:stats㤼㸲:

    filter, lag

The following objects are masked from 㤼㸱package:base㤼㸲:

    intersect, setdiff, setequal, union
library(gapminder)
package 㤼㸱gapminder㤼㸲 was built under R version 4.0.4
library(ggthemes)
package 㤼㸱ggthemes㤼㸲 was built under R version 4.0.4
library("readxl")
package 㤼㸱readxl㤼㸲 was built under R version 4.0.4
library(tidyverse)
package 㤼㸱tidyverse㤼㸲 was built under R version 4.0.4Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages ------------------------------------- tidyverse 1.3.0 --
v tibble  3.0.6     v purrr   0.3.4
v tidyr   1.1.2     v stringr 1.4.0
v readr   1.4.0     v forcats 0.5.1
package 㤼㸱tibble㤼㸲 was built under R version 4.0.3package 㤼㸱tidyr㤼㸲 was built under R version 4.0.3package 㤼㸱readr㤼㸲 was built under R version 4.0.3package 㤼㸱purrr㤼㸲 was built under R version 4.0.3package 㤼㸱stringr㤼㸲 was built under R version 4.0.3package 㤼㸱forcats㤼㸲 was built under R version 4.0.3-- Conflicts ---------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(imager)
package 㤼㸱imager㤼㸲 was built under R version 4.0.4Loading required package: magrittr

Attaching package: 㤼㸱magrittr㤼㸲

The following object is masked from 㤼㸱package:purrr㤼㸲:

    set_names

The following object is masked from 㤼㸱package:tidyr㤼㸲:

    extract


Attaching package: 㤼㸱imager㤼㸲

The following object is masked from 㤼㸱package:magrittr㤼㸲:

    add

The following object is masked from 㤼㸱package:stringr㤼㸲:

    boundary

The following object is masked from 㤼㸱package:tidyr㤼㸲:

    fill

The following objects are masked from 㤼㸱package:stats㤼㸲:

    convolve, spectrum

The following object is masked from 㤼㸱package:graphics㤼㸲:

    frame

The following object is masked from 㤼㸱package:base㤼㸲:

    save.image
library("EBImage")
package 㤼㸱EBImage㤼㸲 was built under R version 4.0.3
Attaching package: 㤼㸱EBImage㤼㸲

The following objects are masked from 㤼㸱package:imager㤼㸲:

    channel, dilate, display, erode, resize, watershed

The following object is masked from 㤼㸱package:purrr㤼㸲:

    transpose
library(plotly)
package 㤼㸱plotly㤼㸲 was built under R version 4.0.4
Attaching package: 㤼㸱plotly㤼㸲

The following object is masked from 㤼㸱package:EBImage㤼㸲:

    toRGB

The following object is masked from 㤼㸱package:imager㤼㸲:

    highlight

The following object is masked from 㤼㸱package:ggplot2㤼㸲:

    last_plot

The following object is masked from 㤼㸱package:stats㤼㸲:

    filter

The following object is masked from 㤼㸱package:graphics㤼㸲:

    layout

Read the excel file

Caspase3 <- read_excel("C:/Users/mdp18pm/Google Drive/Lab book/2021/APRIL 2021/14_April-23_March_Caspase3_DPRs_CorticalNeurons/Plots with R/Results_Caspase3.xlsx")

Caspase3 Fluorescent Intensity

Now we plot a Grouped graph for Caspase3 fluorescent intensity levels

 
# Grouped
p <- Caspase3 %>% 
      ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) + 
      geom_bar(position="dodge", stat = "summary", fun.y = "mean") +   #Use always stat=summary for mean
    labs(x = "", y = "Caspase3_Int", 
              title = "Caspase3 levels") +
    coord_cartesian(ylim = c(195, 230))
Ignoring unknown parameters: fun.y
    #theme(axis.text.x = element_text(angle = 0, vjust = 1, hjust=1))

fig <- ggplotly(p)
No summary function supplied, defaulting to `mean_se()`
fig

Now we plot a Grouped graph for Caspase3 fluorescent intensity levels for just REPLICATE N=1

 
# Grouped
p2 <- Caspase3 %>% 
      filter(Replicate == "n1") %>%     #we only want to look at n=1
      ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) + 
        geom_bar(position="dodge", stat="identity") +
      labs(x = "", y = "Caspase3_Int", 
              title = "Caspase3 levels_ REPLICATE N=1") +
      coord_cartesian(ylim = c(195, 230)) 
      #theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))

fig2 <- ggplotly(p2)

fig2

Now we plot a Grouped graph for Caspase3 fluorescent intensity levels for just REPLICATE N=2

 
# Grouped
p3 <- Caspase3 %>% 
        filter(Replicate == "n2") %>%     #we only want to look at n=1
        ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) + 
          geom_bar(position="dodge", stat="identity") +
        labs(x = "", y = "Caspase3_Int", 
                    title = "Caspase3 levels_ REPLICATE N=2") +
        coord_cartesian(ylim = c(195, 230)) 
        #theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))

fig3 <- ggplotly(p3)

fig3
NA

Now we plot the two replicates side-by-side to facilitate our visualization

 
# Grouped
p4 <- Caspase3 %>% 
      ggplot(aes(fill=Treatment, y=Fluo_Int, x=Condition)) + 
      geom_bar(position="dodge", stat = "summary", fun.y = "mean") +   #Use always stat=summary for mean
    labs(x = "", y = "Caspase3_Int", 
              title = "Caspase3 levels_ Two replicates") +
    coord_cartesian(ylim = c(195, 230)) +
    facet_wrap(~Replicate) +
    theme(axis.text.x = element_text(angle = 60))
Ignoring unknown parameters: fun.y
fig4 <- ggplotly(p4)
No summary function supplied, defaulting to `mean_se()`
No summary function supplied, defaulting to `mean_se()`
fig4

Caspase3 signal_Occupied area

Now we plot a Grouped graph for Caspase3 signal_Occupied area

 
# Grouped
p5 <- Caspase3 %>% 
      ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) + 
        geom_bar(position="dodge", stat = "summary", fun.y = "mean") +
      labs(x = "", y = "Caspase3_Area of signal", 
                  title = "Caspase3 Area")  
Ignoring unknown parameters: fun.y
      #coord_cartesian(ylim = c(130, 140)) +
      #theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))

fig5 <- ggplotly(p5)
No summary function supplied, defaulting to `mean_se()`
fig5

Now we plot a Grouped graph for Caspase3 signal_Occupied area just for REPLICATE N=1

 
# Grouped
p6<- Caspase3 %>% 
      filter(Replicate == "n1") %>%     #we only want to look at n=1
      ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) + 
        geom_bar(position="dodge", stat="identity") +
      labs(x = "", y = "Caspase3_Area of signal", 
              title = "Caspase3 Area_ REPLICATE N=1") 
      #coord_cartesian(ylim = c(195, 230)) 
      #theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))

fig6 <- ggplotly(p6)

fig6
NA

Now we plot a Grouped graph for Caspase3 signal_Occupied area just for REPLICATE N=2

 
# Grouped
p7<- Caspase3 %>% 
      filter(Replicate == "n2") %>%     #we only want to look at n=1
      ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) + 
        geom_bar(position="dodge", stat="identity") +
      labs(x = "", y = "Caspase3_Area of signal", 
              title = "Caspase3 Area_ REPLICATE N=2") 
      #coord_cartesian(ylim = c(195, 230)) 
      #theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))

fig7 <- ggplotly(p7)

fig7
NA
 
# Grouped
p8 <- Caspase3 %>% 
      ggplot(aes(fill=Treatment, y=Area_of_Signal, x=Condition)) + 
        geom_bar(position="dodge", stat = "summary", fun.y = "mean") +
      labs(x = "", y = "Caspase3_Area of signal", 
                  title = "Caspase3 Area_ Two Replicates")  +
      facet_wrap(~Replicate) +
      #coord_cartesian(ylim = c(130, 140)) +
      theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust=1))
Ignoring unknown parameters: fun.y
fig8 <- ggplotly(p8)
No summary function supplied, defaulting to `mean_se()`
No summary function supplied, defaulting to `mean_se()`
fig8
NA
LS0tDQp0aXRsZTogIkNhc3Bhc2UzIEludGVuc2l0eSAtIE1HMTMyIGFzc2F5Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3J9DQoNCiNpbnN0YWxsLnBhY2thZ2VzKCJyZWFkeGwiKQ0KI2luc3RhbGwucGFja2FnZXMoImltYWdlciIpDQojZGV2dG9vbHM6Omluc3RhbGxfYml0YnVja2V0KCJncmF1bWFubmxhYnRvb2xzL211bHRpcGFuZWxmaWd1cmUiKQ0KDQojIGluc3RhbGwucGFja2FnZXMoIkJpb2NNYW5hZ2VyIikNCiMgQmlvY01hbmFnZXI6Omluc3RhbGwoIkVCSW1hZ2UiKQ0KDQojaW5zdGFsbC5wYWNrYWdlcygncmVhZGJpdG1hcCcpDQpgYGANCg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdhcG1pbmRlcikNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KCJyZWFkeGwiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGltYWdlcikNCmxpYnJhcnkoIkVCSW1hZ2UiKQ0KbGlicmFyeShwbG90bHkpDQpgYGANCg0KIyMgUmVhZCB0aGUgZXhjZWwgZmlsZQ0KYGBge3J9DQpDYXNwYXNlMyA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9tZHAxOHBtL0dvb2dsZSBEcml2ZS9MYWIgYm9vay8yMDIxL0FQUklMIDIwMjEvMTRfQXByaWwtMjNfTWFyY2hfQ2FzcGFzZTNfRFBSc19Db3J0aWNhbE5ldXJvbnMvUGxvdHMgd2l0aCBSL1Jlc3VsdHNfQ2FzcGFzZTMueGxzeCIpDQpgYGANCg0KDQojIENhc3Bhc2UzIEZsdW9yZXNjZW50IEludGVuc2l0eQ0KDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgZmx1b3Jlc2NlbnQgaW50ZW5zaXR5IGxldmVscw0KYGBge3J9DQogDQojIEdyb3VwZWQNCnAgPC0gQ2FzcGFzZTMgJT4lIA0KICAgICAgZ2dwbG90KGFlcyhmaWxsPVRyZWF0bWVudCwgeT1GbHVvX0ludCwgeD1Db25kaXRpb24pKSArIA0KICAgICAgZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIiwgc3RhdCA9ICJzdW1tYXJ5IiwgZnVuLnkgPSAibWVhbiIpICsgICAjVXNlIGFsd2F5cyBzdGF0PXN1bW1hcnkgZm9yIG1lYW4NCiAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19JbnQiLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgbGV2ZWxzIikgKw0KICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxOTUsIDIzMCkpDQogICAgI3RoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnIDwtIGdncGxvdGx5KHApDQoNCmZpZw0KYGBgDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgZmx1b3Jlc2NlbnQgaW50ZW5zaXR5IGxldmVscyBmb3IganVzdCBSRVBMSUNBVEUgTj0xDQpgYGB7cn0NCiANCiMgR3JvdXBlZA0KcDIgPC0gQ2FzcGFzZTMgJT4lIA0KICAgICAgZmlsdGVyKFJlcGxpY2F0ZSA9PSAibjEiKSAlPiUgICAgICN3ZSBvbmx5IHdhbnQgdG8gbG9vayBhdCBuPTENCiAgICAgIGdncGxvdChhZXMoZmlsbD1UcmVhdG1lbnQsIHk9Rmx1b19JbnQsIHg9Q29uZGl0aW9uKSkgKyANCiAgICAgICAgZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIiwgc3RhdD0iaWRlbnRpdHkiKSArDQogICAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19JbnQiLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgbGV2ZWxzXyBSRVBMSUNBVEUgTj0xIikgKw0KICAgICAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDE5NSwgMjMwKSkgDQogICAgICAjdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnMiA8LSBnZ3Bsb3RseShwMikNCg0KZmlnMg0KYGBgDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgZmx1b3Jlc2NlbnQgaW50ZW5zaXR5IGxldmVscyBmb3IganVzdCBSRVBMSUNBVEUgTj0yDQpgYGB7cn0NCiANCiMgR3JvdXBlZA0KcDMgPC0gQ2FzcGFzZTMgJT4lIA0KICAgICAgICBmaWx0ZXIoUmVwbGljYXRlID09ICJuMiIpICU+JSAgICAgI3dlIG9ubHkgd2FudCB0byBsb29rIGF0IG49MQ0KICAgICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUZsdW9fSW50LCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgICAgZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIiwgc3RhdD0iaWRlbnRpdHkiKSArDQogICAgICAgIGxhYnMoeCA9ICIiLCB5ID0gIkNhc3Bhc2UzX0ludCIsIA0KICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJDYXNwYXNlMyBsZXZlbHNfIFJFUExJQ0FURSBOPTIiKSArDQogICAgICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxOTUsIDIzMCkpIA0KICAgICAgICAjdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnMyA8LSBnZ3Bsb3RseShwMykNCg0KZmlnMw0KDQpgYGANCg0KDQojIyBOb3cgd2UgcGxvdCB0aGUgdHdvIHJlcGxpY2F0ZXMgc2lkZS1ieS1zaWRlIHRvIGZhY2lsaXRhdGUgb3VyIHZpc3VhbGl6YXRpb24NCg0KYGBge3J9DQogDQojIEdyb3VwZWQNCnA0IDwtIENhc3Bhc2UzICU+JSANCiAgICAgIGdncGxvdChhZXMoZmlsbD1UcmVhdG1lbnQsIHk9Rmx1b19JbnQsIHg9Q29uZGl0aW9uKSkgKyANCiAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQgPSAic3VtbWFyeSIsIGZ1bi55ID0gIm1lYW4iKSArICAgI1VzZSBhbHdheXMgc3RhdD1zdW1tYXJ5IGZvciBtZWFuDQogICAgbGFicyh4ID0gIiIsIHkgPSAiQ2FzcGFzZTNfSW50IiwgDQogICAgICAgICAgICAgIHRpdGxlID0gIkNhc3Bhc2UzIGxldmVsc18gVHdvIHJlcGxpY2F0ZXMiKSArDQogICAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDE5NSwgMjMwKSkgKw0KICAgIGZhY2V0X3dyYXAoflJlcGxpY2F0ZSkgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjApKQ0KDQpmaWc0IDwtIGdncGxvdGx5KHA0KQ0KDQpmaWc0DQpgYGANCg0KDQoNCg0KIyBDYXNwYXNlMyBzaWduYWxfT2NjdXBpZWQgYXJlYQ0KDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgc2lnbmFsX09jY3VwaWVkIGFyZWENCmBgYHtyfQ0KIA0KIyBHcm91cGVkDQpwNSA8LSBDYXNwYXNlMyAlPiUgDQogICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUFyZWFfb2ZfU2lnbmFsLCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQgPSAic3VtbWFyeSIsIGZ1bi55ID0gIm1lYW4iKSArDQogICAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19BcmVhIG9mIHNpZ25hbCIsIA0KICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgQXJlYSIpICANCiAgICAgICNjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMTMwLCAxNDApKSArDQogICAgICAjdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnNSA8LSBnZ3Bsb3RseShwNSkNCg0KZmlnNQ0KYGBgDQoNCg0KIyMgTm93IHdlIHBsb3QgYSBHcm91cGVkIGdyYXBoIGZvciBDYXNwYXNlMyBzaWduYWxfT2NjdXBpZWQgYXJlYSBqdXN0IGZvciBSRVBMSUNBVEUgTj0xDQoNCmBgYHtyfQ0KIA0KIyBHcm91cGVkDQpwNjwtIENhc3Bhc2UzICU+JSANCiAgICAgIGZpbHRlcihSZXBsaWNhdGUgPT0gIm4xIikgJT4lICAgICAjd2Ugb25seSB3YW50IHRvIGxvb2sgYXQgbj0xDQogICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUFyZWFfb2ZfU2lnbmFsLCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQ9ImlkZW50aXR5IikgKw0KICAgICAgbGFicyh4ID0gIiIsIHkgPSAiQ2FzcGFzZTNfQXJlYSBvZiBzaWduYWwiLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgQXJlYV8gUkVQTElDQVRFIE49MSIpIA0KICAgICAgI2Nvb3JkX2NhcnRlc2lhbih5bGltID0gYygxOTUsIDIzMCkpIA0KICAgICAgI3RoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIHZqdXN0ID0gMSwgaGp1c3Q9MSkpDQoNCmZpZzYgPC0gZ2dwbG90bHkocDYpDQoNCmZpZzYNCg0KYGBgDQoNCiMjIE5vdyB3ZSBwbG90IGEgR3JvdXBlZCBncmFwaCBmb3IgQ2FzcGFzZTMgc2lnbmFsX09jY3VwaWVkIGFyZWEganVzdCBmb3IgUkVQTElDQVRFIE49Mg0KDQpgYGB7cn0NCiANCiMgR3JvdXBlZA0KcDc8LSBDYXNwYXNlMyAlPiUgDQogICAgICBmaWx0ZXIoUmVwbGljYXRlID09ICJuMiIpICU+JSAgICAgI3dlIG9ubHkgd2FudCB0byBsb29rIGF0IG49MQ0KICAgICAgZ2dwbG90KGFlcyhmaWxsPVRyZWF0bWVudCwgeT1BcmVhX29mX1NpZ25hbCwgeD1Db25kaXRpb24pKSArIA0KICAgICAgICBnZW9tX2Jhcihwb3NpdGlvbj0iZG9kZ2UiLCBzdGF0PSJpZGVudGl0eSIpICsNCiAgICAgIGxhYnMoeCA9ICIiLCB5ID0gIkNhc3Bhc2UzX0FyZWEgb2Ygc2lnbmFsIiwgDQogICAgICAgICAgICAgIHRpdGxlID0gIkNhc3Bhc2UzIEFyZWFfIFJFUExJQ0FURSBOPTIiKSANCiAgICAgICNjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMTk1LCAyMzApKSANCiAgICAgICN0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCB2anVzdCA9IDEsIGhqdXN0PTEpKQ0KDQpmaWc3IDwtIGdncGxvdGx5KHA3KQ0KDQpmaWc3DQoNCmBgYA0KDQoNCmBgYHtyfQ0KIA0KIyBHcm91cGVkDQpwOCA8LSBDYXNwYXNlMyAlPiUgDQogICAgICBnZ3Bsb3QoYWVzKGZpbGw9VHJlYXRtZW50LCB5PUFyZWFfb2ZfU2lnbmFsLCB4PUNvbmRpdGlvbikpICsgDQogICAgICAgIGdlb21fYmFyKHBvc2l0aW9uPSJkb2RnZSIsIHN0YXQgPSAic3VtbWFyeSIsIGZ1bi55ID0gIm1lYW4iKSArDQogICAgICBsYWJzKHggPSAiIiwgeSA9ICJDYXNwYXNlM19BcmVhIG9mIHNpZ25hbCIsIA0KICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ2FzcGFzZTMgQXJlYV8gVHdvIFJlcGxpY2F0ZXMiKSAgKw0KICAgICAgZmFjZXRfd3JhcCh+UmVwbGljYXRlKSArDQogICAgICAjY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDEzMCwgMTQwKSkgKw0KICAgICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgdmp1c3QgPSAxLCBoanVzdD0xKSkNCg0KZmlnOCA8LSBnZ3Bsb3RseShwOCkNCg0KZmlnOA0KDQpgYGANCg0KDQo=